一台 Windows 11 筆電,一個單節點的 CRC 叢集,對外網路斷掉。在這個條件下完整跑完一次 CI:建構、六道安全掃描、SBOM 產出、Cosign 簽章,最後由 Kyverno 在 Kubernetes API 准入層級驗簽,通過才准建立 Pod。
這 30 天要做的就是這件事,而且每一步都在同一台機器上實際跑通、逐項查證過。
為什麼要強調斷網?因為多數 CI/CD 教學預設外網暢通、雲端資源近乎無限,而企業內網最痛的地方恰恰在這裡:連不出去、沒有 root、SCC 卡死。這些限制不是為了增加難度而設的,它們就是現場。
但在談防線之前,得先問一個更基本的問題:
「只要能在 GitHub Actions 或 Jenkins 上成功執行 npm run build 並打包出 Docker Image,就算是完成了持續整合(CI)嗎?」
在現代軟體開發中,軟體供應鏈攻擊(Software Supply Chain Attacks)層出不窮——從 SolarWinds 事件、Codecov 腳本遭篡改,到 npm / PyPI 上日益頻繁的套件投毒(Typosquatting & Dependency Confusion)。單純在遠端伺服器自動執行編譯指令,只能稱作「自動化建構(Automated Build)」;真正具備生產品質(Production-Grade)的 CI,真正要做到的是:在程式碼合入主線與交付部署前,建立一套具備「強制阻擋能力(Fail-Fast)」的軟體供應鏈安全與品質防禦邊界。
要評估一套 CI 流水線是否達到生產級別,可從以下三組關鍵的技術認知差異來檢視:
「假綠燈」——流水線是綠的,但它什麼也沒擋住——會是這 30 天反覆回來的主題。後面你會看到它以各種形式出現:一個測試檔就能繞過的覆蓋率門檻、永遠不會失敗的 sed -i、看起來裝好了其實從沒生效的忽略清單。
這條防線最終長什麼樣子?把一個沒有簽章的映像檔推到受保護路徑,然後試著部署它:
Error from server: admission webhook "mutate.kyverno.svc-fail" denied the request:
verify-frontend-demo-image:
verify-image-signature: 'failed to verify image .../frontend-demo/client:unsigned-test:
.attestors[0].entries[0].keys: no signatures found'
Pod 從未被建立——不是啟動後被殺掉,是在 API Server 的准入階段就被拒絕。這是 Day 29 的實測輸出,放在第一天是想先讓你看到終點;接下來 28 天要做的,是把通往這個結果的每一塊零件一個一個裝起來。
這三組差異,都建立在前面提到的那個前提之上:一台筆電、一個真正斷網也能跑的環境。具體做法是:所有 Task 使用的容器映像以 digest 釘死並經內部 Registry 代理,弱點資料庫與靜態分析規則集透過排程鏡射至內部儲存,執行期偵測不到對外連線時,快取刷新程序會略過而非中斷整條流水線。此設計貫穿後續多個階段的實作細節,每一項後面都會各自展開。
今日目的:說明這 30 天要解決的核心問題與整體防線佈局,作為後續 29 天的地圖。
先備知識:本系列預設讀者已具備基礎 Kubernetes 概念(Pod/Service/Namespace)、基本 Docker 操作經驗、Git 版本控制使用習慣,以及在終端機下執行指令的基本熟悉度。Tekton、Kyverno、Cosign、SLSA 等本系列核心工具與標準不要求預先熟悉,會在各自登場的章節從零介紹、逐步建立。
供應鏈的每個環節都可能被下手,因此這條流水線上設了六道關卡:
| # | 阻擋線 | 防範威脅與目的 | 對應工具與機制 |
|---|---|---|---|
| 1 | 機密洩漏防護 | 避免 API Key、私鑰或 Token 被硬編碼寫入 Git 歷史紀錄 | gitleaks |
| 2 | 程式碼漏洞防護 | 靜態分析找出 XSS、SQL 注入、不安全反序列化等 Known-Bad 模式 | semgrep |
| 3 | 相依套件漏洞防護 | 阻擋含有已知高危 CVE(如 Log4j 類漏洞)的第三方套件混入生產環境 | sca-scan / trivy fs |
| 4 | 邏輯錯誤防衛 | 確保異動不破壞既有業務邏輯,強制執行品質門檻 | Jest (單元測試覆蓋率門檻) |
| 5 | 程式碼品質與型別安全 | 落實程式風格一致性與嚴格 TypeScript 型別檢查,減少 Runtime 異常 | ESLint & TypeScript (多重 tsconfig) |
| 6 | 映像檔層漏洞防護 | 確保最終打包出的 Container Image Base OS 與系統套件無高危 CVE | trivy-scan (Image) |
這六道關卡將於後續單元以 DAG(有向無環圖) 順序串接,讓每一步的先後順序都有資安上的理由。
為了留下排雷和調整的餘地,本系列將 30 天的演進過程劃分為五個階段。各階段內部單元可依除錯需求與架構調優靈活調整,同時維持整體防禦體系的依賴順序:
30 天雖然依五個階段循序推進,但部分早期單元建立的機制會被後段多個天次重複依賴,形成跨階段的「骨幹」與「輻射」關係。下圖標出其中 7 組關鍵的跨天依賴(以依賴來源日為起點、彙整指向後續依賴日),協助之後跳讀或排錯時快速定位「這個機制最早在哪一天建立」。

下圖展示本系列於單機 CRC 環境落地的全鏈路 DevSecOps 自動化與防禦架構拓撲:

整體架構涵蓋三大階段與 API 層級的准入攔截機制:
本系列實作建置於 Windows 11 單機運行的 Red Hat OpenShift Local (CRC)。
為什麼是 CRC,而不是資源需求更輕量的 minikube 或 kind?答案在於 OpenShift 原生提供的四大核心機制,這些機制是全系列實戰的地基:
minikube、kind 這類輕量方案要重現這四項,得自己額外拼湊 Ingress Controller、私有 Registry、Operator 生態;選擇原生具備這些機制的 OpenShift,是用資源需求換取更貼近正式環境的平台能力。
不同於一般預設外網暢通且具備 Root 權限的雲端 CI 環境,這 30 天處理的是企業環境真正會卡住你的地方,特別針對以下情境進行實作與排雷:
這些限制正是企業在推動 DevSecOps 落地時最常面臨的硬核痛點。本系列將拆解從初始設定到生產環境調優的完整細節(包括假綠燈排查、語意重構與離線 API 轉折)。
單靠 CI 流水線無法替代企業整體的資安合規認證,本系列實作也不是要完整滿足國際資安標準的全部條款,而是一套概念驗證(PoC)環境。以下對映呈現的是「具體做到哪些技術行為」,不是等級認證——這個態度在全系列中維持一致,後續章節提到 SLSA 等標準時也會延續同樣的立場。
聚焦 PW(生產安全軟體)與 RV(漏洞回應)兩個類別:
DevSecOps 的核心在於將資安控制項融入開發流程,轉化為客觀、可量化且可自動執行的阻擋門檻。這是一份真的踩過一遍的紀錄,展示如何從零建立基礎環境,逐步擊破偽綠燈與資安漏洞,並透過 PoC 實作滿足國際資安規範要求的技術控制點。
下一天(Day 2),我們將進入單機實驗室搭建——於 Windows 11 環境建立 CRC(OpenShift Local)單機叢集並掌握資源配置心法。